import { createApp } from 'vue'
import { createPinia } from 'pinia'
import ArcoVue from '@arco-design/web-vue'
import '@arco-design/web-vue/dist/arco.css'
import ArcoVueIcon from '@arco-design/web-vue/es/icon'
import App from './App.vue'
import router from './router'
// 导入工具函数
import { formatDate } from './utils'

import './styles/index.less'

// 创建应用实例
const app = createApp(App)

// 创建 Pinia 实例 (必须在使用前创建并使用)
const pinia = createPinia()

// 注册全局插件 - 确保先使用router再使用pinia
app.use(router)  
app.use(pinia)
app.use(ArcoVue)
app.use(ArcoVueIcon)

// 将router实例保存到全局，方便其他模块引用
window._router = router

// 添加全局属性
app.config.globalProperties.formatDate = formatDate

// 全局错误处理
app.config.errorHandler = (err, vm, info) => {
  console.error('全局错误:', err)

  // 路由错误处理
  if (err.name === 'NavigationDuplicated') {
    // 这是正常行为，不需要报错
    return
  }

  if (err.message && err.message.includes('No match for')) {
    console.error('路由不存在:', err.message)
    // 显示所有可用路由，方便调试
    console.log('当前可用路由:')
    const availableRoutes = router.getRoutes();
    console.log(`已注册路由数量: ${availableRoutes.length}`)
    availableRoutes.forEach(route => {
      console.log(`- ${route.name || '(无名称)'}: ${route.path}, 完整路径: ${route.path}`)
    })
    
    // 输出当前尝试访问的路径
    const currentPath = err.message.match(/path "([^"]+)"/);
    if (currentPath && currentPath[1]) {
      console.log(`尝试访问的路径: ${currentPath[1]}`)
      // 检查是否有路径部分匹配
      const similarRoutes = availableRoutes.filter(route => 
        currentPath[1].includes(route.path) || route.path.includes(currentPath[1]));
      if (similarRoutes.length > 0) {
        console.log('发现类似路径的路由:');
        similarRoutes.forEach(route => {
          console.log(`- ${route.name || '(无名称)'}: ${route.path}`)
        });
      }
    }
  }

  // 如果存在堆栈，输出调用堆栈
  if (err.stack) {
    console.log('错误堆栈:', err.stack)
  }
}


// 挂载应用
app.mount('#app')

// 导出应用和 pinia 实例，方便在其他地方引用
export { app, pinia }
